/**
 * Captain
 * © 2017 Captain copyright，All rights reserved.
 * http://www.sccaptain.com.cn
 * 
 * JAVA : 8
 * 文  件  名: EncryptUtil.java
 * 创  建  人: liutao (liu.tao@sccaptain.com.cn)
 * 创建时间: 2017年8月8日 上午11:24:12
 * 版         本: 1.0.0
 * 备         注:
 * 修订历史:
 */
package com.material.c2c.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.util.StringUtils;

/**
 * 加密解密算法工具类。
 * 
 * @since 1.0
 * @version 1.0
 * @author liutao (liu.tao@sccaptain.com.cn)
 */
public class EncryptUtil {

  // md5加密
  /**
   * md5 加密
   * 
   * @param inputText
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static String md5(String inputText) {
    return encrypt(inputText, "md5");
  }

  // sha加密
  /**
   * sh1 加密
   * 
   * @param inputText
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static String sha1(String inputText) {
    return encrypt(inputText, "sha-1");
  }
  
  /**
   * md5
   * @param in
   * @return
   * @throws IOException
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static String md5(InputStream in) throws IOException {
    return DigestUtils.md5Hex(in);
  }
  
  /**
   * 
   * @param in
   * @return
   * @throws IOException
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static String sha1(InputStream in) throws IOException {
    return DigestUtils.sha1Hex(in);
  }

  /**
   * md5或者sha-1加密
   * 
   * @param param
   *          要加密的内容
   * @param algorithmName
   *          加密算法名称：md5或者sha-1，不区分大小写
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  private static String encrypt(String param, String algorithmName) {
    String encryptText = null;
    if (StringUtils.hasText(param)) {
      try {
        MessageDigest m = MessageDigest.getInstance(algorithmName);
        m.update(param.getBytes("UTF8"));
        byte s[] = m.digest();
        encryptText = hex(s);
      } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
    }
    return encryptText;
  }

  /**
   * 返回十六进制字符串 。
   * 
   * @param bytes
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  private static String hex(byte[] bytes) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < bytes.length; ++i) {
      sb.append(Integer.toHexString((bytes[i] & 0xFF) | 0x100).substring(1, 3));
    }
    return sb.toString();
  }
}
